use shq_common::prelude::{dept::DeptmentCache, empl::EmployeeCache, TreeNode};
use anyhow::{Result, Context};

pub async fn get_user_menu() -> Result<Vec<TreeNode>> {
    // 获取所有部门数据
    let mut dept_cache = DeptmentCache::new()
        .with_context(|| "部门缓存失败")?;
    let raw_departments = dept_cache.get_all_dept().await?;
    // 获取所有员工数据
    let mut empl = EmployeeCache::new()
        .with_context(|| "员工缓存失败！")?;
    let employees = empl.get_all_empl().await?;
    // 将部门数据转换为 TreeNode
    let department_nodes: Vec<TreeNode> = raw_departments
        .into_iter()
        .map(|dept| {
            // 判断 parent_id 是否等于当前 id，如果是则设为 None（根节点），否则用 o_parent_id
            let parent_key = if dept.parent_id == dept.id {
                None
            } else {
                Some(format!("o_{}", dept.parent_id))
            };
            TreeNode {
                key: format!("o_{}", dept.id),  // 部门 key 格式: o_部门ID
                title: dept.name,               // 部门名称作为 title
                parent_key,                     // 父节点 key
            }
        })
        .collect();

    // 将员工数据转换为 TreeNode
    let employee_nodes: Vec<TreeNode> = employees
        .into_iter()
        .map(|empl| {
            TreeNode {
                key: empl.id.to_string(),  // 员工 key 格式: e_员工ID 
                title: empl.name,                // 员工姓名作为 title
                parent_key: Some(format!("o_{}", empl.organ_id)), // 员工的父节点是所属部门
            }
        })
        .collect();

    // 合并部门和员工节点
    let mut all_nodes = department_nodes;
    all_nodes.extend(employee_nodes);

    Ok(all_nodes)
}